<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // "use strict"
        // 1.谈下对this的理解？
        // 不要关注this的定义 要关注this的调用
        // function test(){
        //     console.log(this);
        // }

        // // test();
        // let obj = {
        //     name:"张三",
        //     fn:test
        // }
        // obj.fn();
        // 1.函数的直接调用 window  undefined
        // function test(){
        //     console.log(this);
        // }

        // test();
        // 2.对象里调用 
        // let obj = {
        //     name:"张三",
        //     fn:function(){
        //         console.log("fn",this)
        //     }
        // }
        // // obj.fn();
        // let myfn = obj.fn;
        // myfn();
        // 3.定时器 循环里的this
        // document.onclick = function () {
        //     console.log(this);
        //     let that = this;
        //     // _this
        //     // setTimeout(function () {
        //     //     console.log(that);
        //     // }, 1000)
        //     let arr = [1,2,3];
        //     arr.forEach(function(){
        //         console.log(this);
        //     })
        // }

        // 4.构造函数 或者是类里的this  this会指向 实例化对象
        // function Person(name){
        //     this.name = name;
        //     this.fn = function(){
        //         console.log("fn")
        //     }
        //     console.log(this);
        // }

        // let zhangsan = new Person("张三");
        // let lisi  = new Person("李四");

        // class Person {
        //     constructor(name) {
        //         this.name = name;
        //         this.fn = function () {
        //             console.log("fn")
        //         }
        //         console.log(this);
        //     }
        // }

        // // console.log(typeof Person);
        // let zhangsan = new Person("张三");
        // let lisi = new Person("李四");

        // 5.箭头函数 ：没有this绑定 ，this是上层 的上下文（context）
        // const fn = ()=>{
        //     console.log(this);
        // } 

        // // fn();
        // document.onclick = fn;


    // typeof 不足 
    // 对象  和 数组  null
    // console.log(typeof null);
    // console.log(typeof []);
    // console.log(typeof {})



    // instanceof :判断某个实例 在原型链上是否有关系
    // console.log([] instanceof Array);
    // console.log({} instanceof Object);
    // console.log([] instanceof Object);
    // constructor
    // console.log([].constructor===Array);
    // console.log({}.constructor===Object);
    // console.log([].constructor===Object);
    // isArray()
    //     let str = "afds";
    //   // 精确判断数据类型的
    //    console.log( Object.prototype.toString.call(null));
    //    console.log( Object.prototype.toString.call([]));
    //    console.log( Object.prototype.toString.call({}));

    // MDN文档 



    </script>
</body>

</html>